#include"Protocol.hpp"
#include"TcpServer.hpp"
#include<memory>

void Usage(std::string proc)
{
    std::cerr << "Usage: " << proc << " port" << std::endl;    
}

int main(int argc,char *argv[])
{
// //智能指针（这个只能指针只想创建一个socket基类指针）
//     std::unique_ptr<Socket> sockp = std::unique_ptr<TcpSocket>();   //基类指针将来指向的是它的子类指针创的是Tcp套接字
// //也就由基类指针指向了对应的子类
// //创建TCP套接字 套接字需要先有
//     sockp->BuildTcpSocketMethod();     //直接一调用  就创建完成

    if(argc != 2)
    {
        Usage(argv[0]);
        exit(USAGE_ERR);
    }
//先创建一个协议对象
    std::unique_ptr<Protocol> protocol = std::make_unique<Protocol>();

//构建服务器对象（构建一个TcpServer）    TcpServer对象构建的时候  参数是传端口号  把端口号转成字符串
//然后把协议所对应的GetRequest 所对应的方法   注册进TcpServer内  TcpServer收到了对应的数据会把对应的文件描述符和对应的客户端信息
//回调给协议中的 GetRequest 模块  由他负责读和将来的写
    std::unique_ptr<TcpServer> tsvr = std::make_unique<TcpServer>(std::stoi(argv[1]),
        [&protocol](std::shared_ptr<Socket> &sock,InetAddr &client){
            protocol->GetRequest(sock,client);     //跟协议内容勾连     网络的通信过程过渡到了protocol如何读取的问题
    });
    tsvr->Start();

    return 0;
}



